자바 개발 키트
1. 개요
1. 개요
자바 개발 키트는 자바 애플리케이션과 애플릿을 개발하기 위한 오라클의 공식 소프트웨어 개발 키트이다. 이 키트에는 자바 컴파일러, 자바 가상 머신, 자바 런타임 환경, 다양한 개발 도구 및 광범위한 표준 라이브러리가 포함되어 있다. 자바 개발 키트는 윈도우, macOS, 리눅스 등 여러 운영 체제에서 사용할 수 있다.
자바 개발 키트의 첫 번째 공식 버전인 JDK 1.0은 1996년 1월 23일에 출시되었다. 현재는 오라클이 상용 라이선스로 제공하는 오라클 JDK와 GNU 일반 공중 사용 허가서 v2 라이선스 하에 제공되는 오픈 소스 프로젝트인 OpenJDK가 주요 배포판으로 존재한다. 자바 개발 키트 없이는 자바 언어로 작성된 소스 코드를 컴파일하거나 실행 파일을 생성할 수 없다.
개발자는 자바 개발 키트를 사용하여 소스 코드를 바이트코드로 컴파일하고, 자바 아카이브 파일로 패키징하며, 프로그램을 실행하고 디버깅할 수 있다. 또한 자바독 도구를 이용해 API 문서를 생성하는 작업도 자바 개발 키트를 통해 이루어진다. 이처럼 자바 개발 키트는 자바 기반 소프트웨어 개발의 핵심 인프라를 제공한다.
자바 개발 키트는 통합 개발 환경이나 빌드 자동화 도구와 같은 외부 도구와도 긴밀하게 연동되어 작동한다. 메이븐이나 그레이들 같은 빌드 도구는 내부적으로 자바 개발 키트의 컴파일러를 호출하여 프로젝트를 빌드한다. 따라서 모든 자바 개발 환경의 기초가 되는 필수 구성 요소라고 할 수 있다.
2. 주요 구성 요소
2. 주요 구성 요소
2.1. 자바 컴파일러 (javac)
2.1. 자바 컴파일러 (javac)
자바 컴파일러는 javac라는 명령어로 실행되며, 자바 개발 키트의 핵심 구성 요소이다. 이 컴파일러의 주요 역할은 개발자가 작성한 자바 소스 코드 파일(.java 확장자)을 자바 바이트코드로 구성된 클래스 파일(.class 확장자)로 변환하는 것이다. 이렇게 생성된 바이트코드는 플랫폼에 독립적이며, 이후 자바 가상 머신이 특정 운영체제에 맞게 해석하고 실행한다.
javac 컴파일러는 명령줄에서 다양한 옵션과 함께 사용된다. 주요 옵션으로는 소스 코드의 문자 인코딩을 지정하는 -encoding, 컴파일된 클래스 파일이 저장될 디렉토리를 지정하는 -d, 그리고 컴파일 과정에서 참조해야 하는 외부 라이브러리의 위치를 지정하는 -classpath 또는 -cp 등이 있다. 또한, 자바 9에서 도입된 자바 플랫폼 모듈 시스템을 지원하기 위한 --module-path와 같은 모듈 관련 옵션도 제공한다.
컴파일 과정에서는 구문 오류, 타입 불일치, 접근 제한 위반 등 다양한 종류의 오류를 검출한다. 이를 통해 런타임에 발생할 수 있는 많은 문제를 사전에 방지할 수 있다. 대부분의 통합 개발 환경은 내부적으로 이 javac 컴파일러를 호출하여 실시간으로 코드를 검증하고 빌드한다.
javac는 지속적으로 발전해 왔으며, 새로운 자바 버전이 출시될 때마다 해당 버전의 언어 사양을 완벽히 지원하도록 업데이트된다. 예를 들어, 람다 표현식이나 텍스트 블록과 같은 새로운 언어 기능을 사용한 코드는 해당 기능을 지원하는 버전의 javac로만 컴파일할 수 있다.
2.2. 자바 가상 머신 (JVM)
2.2. 자바 가상 머신 (JVM)
자바 가상 머신은 자바 개발 키트의 핵심 구성 요소 중 하나이다. 이는 자바 바이트코드를 해석하고 실행하는 엔진 역할을 한다. 자바 애플리케이션은 특정 하드웨어나 운영체제에 종속되지 않는 중간 형태의 바이트코드로 컴파일되는데, 자바 가상 머신은 이 바이트코드를 각 플랫폼에 맞게 실제 기계어로 변환하여 실행한다. 이러한 구조는 자바의 핵심 특징인 "한 번 작성하면, 어디서나 실행된다"는 원칙을 가능하게 하는 기반 기술이다.
자바 가상 머신의 주요 기능은 메모리 관리, 가비지 컬렉션, 그리고 보안을 포함한다. 애플리케이션이 실행되는 동안 힙 메모리를 할당하고 사용하지 않는 객체를 자동으로 회수하는 가비지 컬렉션을 수행하여 개발자의 부담을 줄인다. 또한, 바이트코드 검증기를 통해 안전하지 않은 코드의 실행을 방지하는 등 런타임 환경의 안정성과 보안을 유지한다. 이러한 관리 기능들은 C++ 같은 언어와 비교될 때 자바의 장점으로 꼽힌다.
자바 가상 머신의 구현체는 하나가 아니다. 오라클이 제공하는 핫스팟 가상 머신이 가장 널리 알려져 있지만, OpenJDK 프로젝트를 기반으로 한 다른 벤더들도 각자의 최적화된 자바 가상 머신을 제공한다. 예를 들어, 낮은 지연 시간의 가비지 컬렉터에 중점을 둔 구현이나 특정 마이크로서비스 아키텍처에 맞춘 구현 등 다양한 변종이 존재한다. 이는 개발자가 애플리케이션의 성능 요구사항에 맞춰 적절한 자바 가상 머신을 선택할 수 있음을 의미한다.
자바 가상 머신은 자바 언어에 국한되지 않는다. JVM 위에서 동작하는 다른 프로그래밍 언어들, 예를 들어 코틀린, 스칼라, 클로저 등도 존재한다. 이는 자바 가상 머신이 단순한 자바 실행기가 아니라, 하나의成熟된 플랫폼으로 자리잡았음을 보여준다. 따라서 자바 개발 키트를 설치한다는 것은 이 다양한 생태계의 애플리케이션을 실행할 수 있는 기반을 마련하는 것과 같다.
2.3. 자바 런타임 환경 (JRE)
2.3. 자바 런타임 환경 (JRE)
자바 런타임 환경은 자바 애플리케이션을 실행하는 데 필요한 최소한의 환경을 제공하는 소프트웨어 패키지이다. 이는 자바 가상 머신, 핵심 자바 API 클래스 라이브러리, 그리고 애플리케이션 실행을 지원하는 구성 파일들로 이루어져 있다. 사용자는 JRE만 설치하면 자바 애플릿이나 자바 애플리케이션을 별도의 개발 도구 없이도 실행할 수 있다.
JRE의 핵심 구성 요소는 자바 가상 머신이다. JVM은 자바 바이트코드를 해석하고 운영체제에 맞게 기계어로 변환하여 실행하는 엔진 역할을 한다. 이를 통해 자바 프로그램은 "Write Once, Run Anywhere" 원칙 하에 윈도우, macOS, 리눅스 등 다양한 플랫폼에서 동일하게 작동할 수 있다. 또한 JRE에는 자바 클래스 라이브러리가 포함되어 있어 파일 입출력, 네트워킹, 사용자 인터페이스 생성 등 기본적인 프로그래밍 작업을 지원한다.
JRE는 자바 개발 키트의 하위 집합이다. JDK에는 JRE의 모든 구성 요소와 함께 자바 컴파일러, 디버거, 자바독 같은 개발 도구가 추가로 포함되어 있다. 따라서 소프트웨어 개발자는 JDK를 설치해야 코드를 작성하고 컴파일할 수 있으며, 최종 사용자는 컴파일된 프로그램을 실행하기 위해 JRE만 설치하면 된다. 역사적으로 오라클은 JRE를 별도의 배포판으로 제공했으나, 최근 자바 버전에서는 JDK 설치 시 자동으로 포함되는 방식으로 변화했다.
2.4. 개발 도구 (jar, javadoc 등)
2.4. 개발 도구 (jar, javadoc 등)
자바 개발 키트에는 자바 컴파일러와 자바 가상 머신 외에도 소프트웨어 개발과 배포를 지원하는 여러 명령줄 도구가 포함되어 있다. 대표적인 도구로는 jar와 javadoc이 있다. jar 도구는 자바 아카이브 파일을 생성하고 관리하는 데 사용되며, 여러 클래스 파일과 리소스를 하나의 압축 파일로 묶어 애플리케이션 배포나 라이브러리 공유를 용이하게 한다. javadoc 도구는 소스 코드에 작성된 특수한 형식의 주석을 분석하여 HTML 형식의 API 문서를 자동으로 생성해 준다.
이 외에도 JDK에는 다양한 유틸리티가 제공된다. javap는 클래스 파일을 역어셈블하여 바이트코드나 선언부를 확인할 수 있게 해주는 도구이다. jdb는 자바 애플리케이션을 위한 간단한 명령줄 디버거 역할을 한다. jlink는 자바 런타임 환경을 사용자 정의하여 필요한 모듈만 포함된 런타임 이미지를 생성할 수 있게 해주며, 자바 플랫폼 모듈 시스템과 밀접하게 연관되어 있다.
이러한 도구들은 주로 명령 프롬프트나 터미널 환경에서 사용되지만, 대부분의 현대적인 통합 개발 환경이나 빌드 도구들은 내부적으로 이 도구들을 호출하여 작업을 수행한다. 예를 들어, 메이븐이나 그레이들은 프로젝트를 빌드하고 패키징할 때 javac와 jar 도구를 활용한다. 따라서 JDK에 포함된 개발 도구들은 자바 생태계의 기반을 이루는 핵심 요소라고 할 수 있다.
2.5. 표준 라이브러리 (Java API)
2.5. 표준 라이브러리 (Java API)
자바 개발 키트의 핵심 구성 요소 중 하나는 자바 표준 라이브러리 또는 자바 API이다. 이는 자바 프로그래밍 언어로 애플리케이션을 개발할 때 기본적으로 사용할 수 있는 방대한 클래스와 인터페이스의 집합을 제공한다. 개발자는 이 라이브러리를 통해 파일 입출력, 네트워킹, 데이터 구조 활용, 그래픽 사용자 인터페이스 생성, 데이터베이스 연결 등 다양한 공통 프로그래밍 작업을 직접 구현하지 않고도 효율적으로 수행할 수 있다.
표준 라이브러리는 패키지로 체계적으로 구성되어 있으며, 각 패키지는 특정 기능 영역을 담당한다. 예를 들어, java.lang 패키지는 문자열 처리, 기본 데이터 타입 래퍼 클래스, 스레드 관리 등 언어의 핵심 기능을 포함한다. java.util 패키지는 컬렉션 프레임워크, 날짜 및 시간 처리, 랜덤 숫자 생성 등의 유틸리티를 제공한다. java.io와 java.nio 패키지는 파일 및 스트림 기반의 입출력을 담당하며, java.net 패키지는 네트워크 프로그래밍을 지원한다.
또한, 라이브러리는 멀티스레딩 동기화, 국제화 및 지역화, 보안 기능, XML 처리, 데이터베이스 접근을 위한 JDBC API와 같은 고급 기능도 포함하고 있다. 이러한 표준화된 API의 존재는 자바의 주요 장점 중 하나로, 플랫폼 독립성을 유지하면서도 풍부한 기능을 바탕으로 복잡한 엔터프라이즈 애플리케이션부터 모바일 앱, 웹 서비스에 이르기까지 광범위한 소프트웨어 개발을 가능하게 한다.
자바 표준 라이브러리는 모든 자바 개발 키트 배포판에 포함되어 있으며, 그 명세는 자바 커뮤니티 프로세스를 통해 관리된다. 새로운 자바 버전이 출시될 때마다 라이브러리에 새로운 API가 추가되거나 기존 API가 개선되어 개발자에게 지속적으로 진화하는 도구 세트를 제공한다.
3. 버전 및 배포판
3. 버전 및 배포판
3.1. Oracle JDK
3.1. Oracle JDK
오라클 JDK는 오라클이 제공하는 자바 개발 키트의 상용 구현체이다. 2010년 오라클이 썬 마이크로시스템즈를 인수한 이후, 오라클이 자바 플랫폼의 공식적인 관리자 역할을 맡으면서 배포하고 있다. 오라클 JDK는 윈도우, macOS, 리눅스, 솔라리스 등 주요 운영체제를 지원하며, 상업적 목적으로 사용할 경우 오라클과의 별도 라이선스 계약이 필요하다.
오라클 JDK는 자바 애플리케이션 개발과 실행에 필요한 핵심 도구와 라이브러리를 포함한다. 여기에는 자바 컴파일러 (javac), 자바 가상 머신 (JVM), 자바 런타임 환경 (JRE), 자바 아카이브 (jar) 패키징 도구, 자바독 (javadoc) 문서 생성기 등이 포함된다. 또한 자바 표준 라이브러리(Java API)의 완전한 구현체를 제공하여 개발자가 다양한 기능을 활용할 수 있게 한다.
오라클 JDK의 라이선스 정책은 역사적으로 중요한 변화를 겪었다. 초기에는 상용 라이선스로만 제공되었으나, 2019년 4월 이후 출시된 버전(예: Java 11)부터는 상업적 사용에 대해 유료 구독 모델을 도입했다. 이에 따라 많은 기업과 개발자 커뮤니티는 무료 대안인 OpenJDK 기반 배포판(예: 아마존 코레토, 이클립스 아도푸툼)으로 전환하는 추세를 보였다.
오라클 JDK는 장기 지원(LTS) 버전을 정기적으로 제공하며, 이는 기업 환경에서 안정적인 지원을 필요로 할 때 선호되는 선택지가 된다. Java 8, Java 11, Java 17 등이 대표적인 LTS 버전에 해당한다. 오라클은 이러한 LTS 버전에 대해 확장된 보안 업데이트와 기술 지원을 제공한다.
3.2. OpenJDK
3.2. OpenJDK
OpenJDK는 자바 플랫폼, 스탠더드 에디션의 공개 소스 구현체이다. 이 프로젝트는 자바 개발 키트, 자바 런타임 환경 및 관련 도구와 라이브러리의 공개 참조 구현을 제공하는 것을 목표로 한다. 썬 마이크로시스템즈가 2006년에 시작했으며, 이후 회사를 인수한 오라클이 관리하고 있다. OpenJDK는 GNU 일반 공중 사용 허가서 버전 2에 따라 라이선스가 부여된 자유 소프트웨어이다.
OpenJDK는 자바 생태계의 핵심 기반이 된다. 오라클 JDK를 비롯한 많은 상용 및 오픈소스 JDK 배포판들이 OpenJDK 코드베이스를 기반으로 구축된다. 이는 자바 커뮤니티 프로세스를 통해 개발된 자바 표준의 공식 구현을 제공함으로써, 자바의 호환성과 표준 준수를 보장하는 데 중요한 역할을 한다.
주요 구성 요소로는 자바 가상 머신인 HotSpot, 자바 컴파일러, 핵심 자바 클래스 라이브러리 등이 포함된다. 프로젝트는 공개적으로 접근 가능한 메릴린 저장소에서 호스팅되며, 개발에 광범위한 커뮤니티가 참여한다. OpenJDK 빌드는 윈도우, macOS, 리눅스 등 여러 운영체제에서 사용할 수 있다.
OpenJDK의 등장은 자바의 발전에 있어 중요한 전환점이었다. 이를 통해 자바 플랫폼의 투명성이 증가했고, 아마존 코레토, 이클립스 아도퉴, 아즈룬 Zulu와 같은 다양한 벤더의 JDK 배포판이 생겨나는 생태계의 기반을 마련했다. 또한, 자바 11 이후부터는 오라클이 제공하는 상용 JDK의 무료 업데이트 정책이 변경되면서, 많은 개발자와 기업이 장기 지원이 보장된 OpenJDK 기반 배포판으로 전환하는 계기가 되기도 했다.
3.3. 다른 벤더 JDK (Amazon Corretto, AdoptOpenJDK 등)
3.3. 다른 벤더 JDK (Amazon Corretto, AdoptOpenJDK 등)
오라클이 제공하는 오라클 JDK와 OpenJDK 외에도 여러 기업과 커뮤니티에서 자체적으로 JDK를 빌드하여 배포하고 있다. 이러한 벤더 JDK는 대부분 OpenJDK 소스 코드를 기반으로 하며, 각 벤더별로 성능 최적화, 보안 패치, 장기 지원 정책, 또는 특정 클라우드 환경에 대한 튜닝을 제공한다는 특징이 있다.
대표적인 벤더 JDK로는 아마존 웹 서비스(AWS)가 제공하는 아마존 코레토(Amazon Corretto)가 있다. 코레토는 오픈 소스이며 무료로 사용할 수 있으며, AWS 서비스와의 긴밀한 통합 및 장기적인 보안 업데이트를 보장한다. 또한 이클립스 재단의 Adoptium(구 AdoptOpenJDK) 프로젝트는 커뮤니티 중심의 고품질 OpenJDK 빌드를 제공하며, 다양한 운영 체제와 아키텍처를 지원한다.
그 외에도 Azul Systems의 줄루(Zulu), 마이크로소프트의 마이크로소프트 빌드 오브 오픈JDK(Microsoft Build of OpenJDK), 레드햇의 OpenJDK 빌드 등이 활발히 사용되고 있다. 개발자는 프로젝트의 요구사항, 라이선스 정책, 지원 주기, 그리고 특정 플랫폼에 대한 호환성을 고려하여 적절한 JDK 배포판을 선택할 수 있다.
3.4. 버전 역사 (Java 8, 11, 17, LTS 등)
3.4. 버전 역사 (Java 8, 11, 17, LTS 등)
자바 개발 키트의 버전 역사는 자바 플랫폼의 진화를 보여준다. 초기 버전인 JDK 1.0은 1996년에 출시되었으며, 이후 지속적인 업데이트를 통해 언어와 플랫폼이 확장되어 왔다. 주요 변화는 자바 8에서 도입된 람다 표현식과 스트림 API와 같이 언어 기능이 대대적으로 추가된 시점에서 두드러진다.
자바의 버전 관리 정책은 자바 9 이후로 약 6개월마다 새로운 기능 릴리스를 제공하는 빠른 출시 주기를 채택했다. 이와 함께 장기 지원 버전이라는 개념이 도입되어, 특정 버전은 확장된 기간 동안 보안 업데이트와 유지보수를 받는다. 대표적인 LTS 버전으로는 자바 8, 자바 11, 자바 17 등이 있다.
각 LTS 버전은 중요한 기술적 이정표를 나타낸다. 자바 11에서는 오라클 JDK의 상업적 라이선스 변경과 함께 OpenJDK 기반의 무료 빌드가 본격화되었다. 자바 17에서는 자바 플랫폼 모듈 시스템이 더욱 안정화되었고, 여러 프리뷰 기능이 표준으로 정립되었다. 이러한 LTS 버전들은 기업 환경에서의 안정적인 배포 기준으로 널리 채택된다.
최신 버전들은 계속해서 언어의 현대화를 추구하며, 가비지 컬렉터 성능 개선, 새로운 API 추가, 그리고 개발자 생산성 향상을 위한 문법 개선을 지속하고 있다. 사용자는 프로젝트의 요구사항과 지원 정책을 고려하여 적절한 JDK 버전과 배포판을 선택해야 한다.
4. 설치 및 환경 설정
4. 설치 및 환경 설정
4.1. 운영체제별 설치 방법
4.1. 운영체제별 설치 방법
자바 개발 키트는 윈도우, macOS, 리눅스 등 다양한 운영체제에 설치할 수 있다. 각 운영체제별로 설치 방법과 패키지 관리 방식이 다르며, 일반적으로 공식 웹사이트나 패키지 관리자를 통해 다운로드할 수 있다.
윈도우에서는 오라클이나 다른 벤더의 공식 웹사이트에서 설치 프로그램(.exe 또는 .msi)을 다운로드하여 실행하는 것이 일반적이다. 설치 마법사를 따라 진행하면 자동으로 프로그램 파일이 복사되고, 필요에 따라 JAVA_HOME 환경 변수가 설정된다. macOS의 경우, 과거에는 .pkg 설치 패키지를 사용했으나, 최근 버전에서는 Homebrew 같은 패키지 관리자를 통해 OpenJDK를 설치하는 방법이 널리 사용된다.
리눅스 배포판에서는 주로 패키지 관리자를 이용한 설치가 권장된다. 예를 들어, 우분투나 데비안 계열에서는 apt 명령어를, 페도라나 RHEL 계열에서는 dnf나 yum 명령어를 사용하여 JDK 패키지를 설치할 수 있다. 많은 리눅스 배포판의 공식 저장소에는 OpenJDK 패키지가 포함되어 있어 비교적 쉽게 설치할 수 있다. 설치 후에는 터미널에서 java -version 명령어를 실행하여 정상적으로 설치되었는지 확인할 수 있다.
4.2. JAVA_HOME 환경 변수 설정
4.2. JAVA_HOME 환경 변수 설정
JAVA_HOME 환경 변수 설정은 자바 개발 키트를 설치한 후 운영체제의 명령줄이나 쉘에서 JDK의 설치 경로를 시스템이 인식할 수 있도록 하는 중요한 단계이다. 이 변수는 자바 기반 애플리케이션이나 서버, 빌드 도구 등이 자바 실행 파일(java)이나 컴파일러(javac)가 위치한 정확한 디렉터리를 찾을 수 있도록 안내하는 역할을 한다.
주로 JAVA_HOME 변수는 JDK 설치 루트 디렉터리(예: C:\Program Files\Java\jdk-17 또는 /usr/lib/jvm/java-17-openjdk)로 설정한다. 이 경로는 bin 디렉터리의 상위 디렉터리여야 한다. 설정 방법은 운영체제마다 다르다. 윈도우에서는 시스템 속성의 고급 탭에서 환경 변수를 추가하거나, 파워셸을 통해 설정할 수 있다. 리눅스나 macOS의 경우 사용자의 쉘 설정 파일(예: .bashrc, .zshrc)에 export JAVA_HOME=/경로와 같은 명령어를 추가하여 영구적으로 설정한다.
설정이 완료되면 명령 프롬프트나 터미널에서 echo $JAVA_HOME(리눅스/macOS) 또는 echo %JAVA_HOME%(윈도우) 명령어로 경로가 올바르게 출력되는지 확인할 수 있다. 또한 javac -version 명령을 실행하여 자바 컴파일러가 정상적으로 호출되는지 검증하는 것이 일반적이다. 이 변수가 제대로 설정되지 않으면 메이븐, 그래들, 톰캣과 같은 많은 개발 도구가 실행되지 않거나 오류를 발생시킬 수 있다.
4.3. 명령줄에서의 사용
4.3. 명령줄에서의 사용
명령줄에서 자바 개발 키트를 사용하는 것은 자바 애플리케이션을 개발, 컴파일, 실행 및 관리하는 핵심적인 방법이다. 주로 터미널이나 명령 프롬프트에서 javac, java, jar 등의 도구를 직접 실행하여 작업을 수행한다. 이 방식은 통합 개발 환경에 의존하지 않고도 빌드 과정을 세밀하게 제어할 수 있으며, 자동화 스크립트나 서버 환경에서 특히 유용하게 활용된다.
가장 기본적인 사용법은 javac 명령어로 자바 소스 코드 파일(.java)을 바이트코드(.class 파일)로 컴파일하는 것이다. 예를 들어, javac HelloWorld.java 명령을 실행하면 해당 파일이 컴파일된다. 컴파일이 성공적으로 완료되면, java 명령어를 사용하여 자바 가상 머신에서 프로그램을 실행할 수 있다. 실행 시에는 .class 확장자를 제외한 클래스 이름을 사용하며, java HelloWorld와 같은 형태로 입력한다.
자바 개발 키트에는 애플리케이션을 패키징하고 배포하는 데 필수적인 jar 도구도 포함되어 있다. 이 도구를 사용하면 여러 개의 클래스 파일과 리소스를 하나의 JAR 파일로 압축하여 관리할 수 있다. 또한, javadoc 명령어를 실행하면 소스 코드의 주석을 기반으로 API 문서를 자동으로 생성할 수 있어 개발 생산성을 높이는 데 기여한다. 이 외에도 디버깅을 위한 jdb, 성능 모니터링을 위한 jconsole 등 다양한 명령줄 도구를 제공한다.
5. JDK와 JRE의 차이
5. JDK와 JRE의 차이
자바 개발 키트(JDK)는 자바 애플리케이션을 개발하기 위한 완전한 소프트웨어 패키지다. 이는 자바 런타임 환경(JRE)과 개발에 필요한 모든 도구를 포함한다. 반면, JRE는 오직 자바 프로그램을 실행하는 데 필요한 구성 요소만을 담고 있다. 즉, 개발자는 JDK가 필요하지만, 단순히 자바로 만들어진 프로그램을 실행만 하는 최종 사용자에게는 JRE만으로 충분하다.
JDK의 핵심 구성 요소에는 자바 컴파일러(javac), 자바 가상 머신(JVM), 자바 아카이브(jar) 도구, 자바독(javadoc) 등이 있다. 이 도구들은 소스 코드를 바이트코드로 컴파일하고, 프로그램을 실행하며, 라이브러리를 패키징하고, 문서를 생성하는 역할을 한다. JRE는 이러한 개발 도구 없이 JVM과 자바 프로그램 실행을 위한 핵심 클래스 라이브러리만을 제공한다.
이 차이는 설치 파일의 크기와 시스템 리소스 사용에서도 나타난다. JDK는 더 많은 도구와 디버거 등을 포함하므로 JRE보다 설치 공간이 크다. 또한, JDK를 설치하면 일반적으로 JRE도 함께 설치된다. 역사적으로 오라클은 두 제품을 별도로 배포했으나, 최신 자바 플랫폼 모듈 시스템 도입 이후 배포 방식이 변화해 왔다.
요약하면, JDK는 '만드는 도구 상자'이고 JRE는 '실행하는 엔진'이라고 볼 수 있다. 통합 개발 환경(IDE)이나 메이븐(Maven), 그래들(Gradle) 같은 빌드 도구를 사용하여 자바 개발을 할 때는 반드시 JDK가 시스템에 설치되어 있어야 한다.
6. 개발 워크플로우에서의 역할
6. 개발 워크플로우에서의 역할
6.1. 소스 코드 컴파일
6.1. 소스 코드 컴파일
자바 개발 키트의 핵심 기능은 자바 소스 코드를 컴파일하여 실행 가능한 형태로 변환하는 것이다. 이 작업은 주로 javac라는 명령줄 도구를 통해 이루어진다. 개발자는 .java 확장자를 가진 텍스트 파일에 자바 프로그래밍 언어로 소스 코드를 작성한 후, javac 컴파일러를 실행하여 해당 코드를 바이트코드로 변환한다. 이 과정에서 문법 오류나 타입 불일치와 같은 컴파일 시간 오류를 검출할 수 있다.
컴파일이 성공적으로 완료되면, 소스 파일 각각에 대응되는 .class 확장자를 가진 클래스 파일이 생성된다. 이 파일들은 자바 가상 머신이 이해할 수 있는 중간 형태의 명령어 집합인 바이트코드를 포함하고 있다. 이러한 방식은 플랫폼 독립성을 실현하는 기반이 되며, 한 번 컴파일된 클래스 파일은 윈도우, macOS, 리눅스 등 어떠한 운영체제의 JVM에서도 실행될 수 있다.
컴파일 과정은 통합 개발 환경이나 빌드 도구를 사용할 때 자동으로 수행되는 경우가 많다. 예를 들어, 이클립스나 인텔리J IDEA와 같은 통합 개발 환경은 코드 저장 시 실시간으로 컴파일을 수행하며, 메이븐이나 그레이들은 프로젝트 빌드 명령 실행 시 필요한 모든 소스 파일을 일괄 컴파일한다. 그러나 기본 원리는 동일하게 JDK에 포함된 javac 컴파일러에 의존한다.
여러 개의 클래스 파일을 효율적으로 관리하고 배포하기 위해 jar 도구를 사용하여 JAR 파일로 패키징할 수 있다. 이는 자바 애플리케이션이나 라이브러리를 배포하는 표준 형식이다. 컴파일과 패키징은 자바 소프트웨어를 개발하고 실행 가능하게 만드는 필수적인 단계를 구성한다.
6.2. 프로그램 실행 및 디버깅
6.2. 프로그램 실행 및 디버깅
JDK는 자바 프로그램을 실행하고 디버깅하는 데 필요한 핵심 도구를 제공한다. java 명령어를 사용하면 자바 컴파일러인 javac로 생성된 바이트코드가 담긴 .class 파일을 실행할 수 있다. 이 명령어는 자바 가상 머신을 구동시켜, 플랫폼에 독립적인 바이트코드를 해당 운영체제에서 실행 가능한 형태로 해석하고 수행한다. 프로그램 실행 시 클래스패스를 지정하여 필요한 라이브러리의 위치를 JVM에 알려줄 수 있다.
디버깅을 위해서는 javac 컴파일 시 -g 옵션을 사용해 디버그 정보를 포함시켜야 하며, jdb라는 명령줄 인터페이스 디버거를 활용할 수 있다. jdb는 중단점 설정, 변수 값 검사, 스택 트레이스 확인 등 전통적인 디버깅 기능을 지원한다. 또한 대부분의 현대적인 통합 개발 환경은 JDK의 디버깅 인터페이스를 내부적으로 사용하여 소스 코드 수준의 시각적 디버깅 환경을 제공한다.
JDK에 포함된 jconsole이나 더 강력한 jvisualvm 같은 도구들은 실행 중인 자바 애플리케이션의 성능을 모니터링하고 프로파일링하는 데 사용된다. 이러한 도구들은 메모리 누수 분석, 스레드 상태 점검, 가비지 컬렉션 활동 조사 등을 가능하게 하여 복잡한 문제의 원인을 진단하는 데 도움을 준다.
6.3. 라이브러리 패키징
6.3. 라이브러리 패키징
라이브러리 패키징은 개발된 자바 코드를 재사용 가능한 단위로 묶어 배포하기 위한 과정이다. JDK는 이 작업을 위한 핵심 도구인 jar 명령어를 제공한다. jar 도구는 자바 아카이브 파일을 생성하며, 이 파일은 클래스 파일, 매니페스트 파일, 리소스 및 기타 메타데이터를 하나의 압축된 파일로 묶는다. 이는 라이브러리 배포나 애플리케이션 실행을 위한 편리한 포맷으로 널리 사용된다.
매니페스트 파일은 패키징된 JAR 파일에 대한 중요한 정보를 담는다. 이 파일에는 애플리케이션의 진입점이 되는 메인 클래스를 지정하거나, 라이브러리의 버전 정보, 클래스패스에 대한 의존성을 선언할 수 있다. 올바른 매니페스트 설정은 다른 프로젝트에서 해당 JAR 파일을 의존성으로 사용하거나 실행 가능한 파일로 만들 때 필수적이다.
패키징된 라이브러리는 메이븐이나 그레이들 같은 빌드 도구의 저장소에 배포되어 관리된다. 이러한 도구들은 프로젝트 설정 파일에 간단한 의존성 선언만으로 필요한 JAR 파일을 자동으로 다운로드하고 클래스패스에 추가해 준다. 이는 복잡한 수동 빌드 과정을 대체하며, 현대 자바 개발 생태계의 표준 워크플로우를 구성한다.
패키징 도구/포맷 | 주요 용도 | 비고 |
|---|---|---|
| 클래스 파일과 리소스를 단일 JAR 파일로 압축 | JDK 기본 제공 |
| 소스 코드의 주석으로부터 API 문서 생성 및 패키징 | JDK 기본 제공 |
WAR 파일 | 웹 애플리케이션 배포를 위한 패키징 | |
EAR 파일 | 엔터프라이즈 애플리케이션 배포를 위한 패키징 |
7. 관련 도구 및 생태계
7. 관련 도구 및 생태계
7.1. 통합 개발 환경 (IDE) 연동
7.1. 통합 개발 환경 (IDE) 연동
자바 개발 키트는 이클립스, 인텔리J IDEA, NetBeans와 같은 주요 통합 개발 환경과 긴밀하게 연동되어 개발 효율성을 높인다. 이러한 IDE들은 JDK를 기반으로 소스 코드 편집, 컴파일, 디버깅, 프로파일링을 하나의 환경에서 지원한다. 개발자는 IDE 설정에서 특정 JDK 버전(예: OpenJDK 17, 오라클 JDK 11)을 지정하여 프로젝트를 구성할 수 있으며, 이를 통해 자바 가상 머신과 자바 컴파일러를 투명하게 활용한다.
IDE는 JDK에 포함된 javadoc 도구를 활용하여 API 문서를 실시간으로 조회할 수 있게 하며, jar 도구를 대신해 라이브러리 의존성 관리와 패키징을 자동화한다. 또한 자바 디버그 인터페이스를 통해 브레이크포인트 설정, 변수 검사, 단계별 실행 등 고급 디버깅 기능을 제공한다. 빌드 도구인 메이븐이나 그레이들과의 통합도 IDE를 통해 원활하게 이루어져, 복잡한 프로젝트 구성과 빌드 과정을 단순화한다.
IDE 이름 | 주요 특징 | 기본 JDK 번들 여부 |
|---|---|---|
강력한 코드 분석 및 리팩토링 | 아니오 (별도 JDK 설치 필요) | |
다양한 플러그인 생태계 | 예 (일부 배포판에 JRE 포함) | |
공식적으로 JDK와 함께 개발됨 | 예 (설치 시 JDK 필요) |
이러한 연동은 자바 플랫폼 모듈 시스템이 도입된 자바 9 이후 버전에서도 지속적으로 지원되며, 모듈 경로 설정과 같은 새로운 개념도 IDE 환경에서 관리할 수 있다. 결과적으로 JDK는 자바 애플리케이션 개발의 핵심 엔진 역할을 하고, IDE는 이 엔진을 효율적으로 제어하고 결과를 시각화하는 조종판과 같은 역할을 수행한다고 볼 수 있다.
7.2. 빌드 도구 (Maven, Gradle)
7.2. 빌드 도구 (Maven, Gradle)
자바 개발 키트를 사용한 프로젝트를 관리하고 빌드하는 과정에서는 Maven과 Gradle 같은 빌드 도구가 널리 사용된다. 이 도구들은 프로젝트의 의존성 관리, 컴파일, 테스트, 패키징 등의 작업을 자동화하여 개발 효율성을 높여준다. 특히 대규모 프로젝트나 여러 외부 라이브러리를 사용하는 경우, 복잡한 의존 관계를 명시적으로 선언하고 자동으로 해결할 수 있다는 점이 큰 장점이다.
Maven은 XML 기반의 설정 파일(pom.xml)을 사용하며, 약속된 프로젝트 구조와 명확한 빌드 라이프사이클을 제공한다. 중앙 저장소에서 필요한 JAR 파일을 자동으로 다운로드하고, 표준화된 명령어(mvn compile, mvn package 등)를 통해 빌드 과정을 실행한다. 반면, Gradle은 Groovy 또는 Kotlin DSL을 사용한 설정 파일(build.gradle)을 통해 더 유연하고 선언적인 빌드 스크립트를 작성할 수 있다. 증분 빌드 기능이 뛰어나 변경된 부분만 빌드하여 속도를 개선할 수 있다.
특성 | Maven | Gradle |
|---|---|---|
설정 언어 | XML | Groovy 또는 Kotlin DSL |
빌드 속도 | 상대적으로 느림 | 증분 빌드로 인해 빠름 |
유연성 | 약속된 구조에 따름 | 높은 유연성과 커스터마이징 가능 |
학습 곡선 | 비교적 완만함 | DSL에 대한 학습 필요 |
두 도구 모두 자바 개발 키트의 핵심 도구인 javac나 jar를 내부적으로 활용하며, 통합 개발 환경과의 연동도 원활하다. 현대적인 자바 생태계에서는 특히 Gradle이 안드로이드 스튜디오의 공식 빌드 시스템으로 채택되는 등 점점 더 널리 사용되고 있다. 개발 팀은 프로젝트의 규모, 복잡도, 팀의 숙련도에 따라 적절한 빌드 도구를 선택하게 된다.
7.3. 모듈 시스템 (Java Platform Module System)
7.3. 모듈 시스템 (Java Platform Module System)
자바 플랫폼 모듈 시스템은 자바 개발 키트 9 버전에서 도입된 핵심 기능이다. 이 시스템은 기존의 JAR 파일과 클래스패스에 의존하던 구조를 대체하여, 애플리케이션의 의존성과 접근 제어를 명시적으로 관리할 수 있는 모듈화된 아키텍처를 제공한다. 각 모듈은 고유한 이름을 가지며, module-info.java라는 모듈 서술자 파일을 통해 자신이 제공하는 패키지와 필요한 다른 모듈을 선언한다. 이를 통해 클래스패스 지옥으로 알려진 의존성 충돌 문제를 해결하고, 더 안전하고 효율적인 애플리케이션 구축이 가능해졌다.
JPMS의 주요 목표는 자바 플랫폼 자체와 대규모 애플리케이션의 모듈화를 지원하는 것이다. 시스템은 강력한 캡슐화를 강제하여, 모듈 내부의 비공개 패키지에 대한 외부의 우발적 접근을 원천적으로 차단한다. 또한, 모듈 그래프를 통해 애플리케이션 시작 시점에 모든 의존성이 올바르게 해결되었는지 검증하여 런타임 오류를 줄인다. 이 모듈 시스템은 자바 런타임 환경의 크기를 줄이는 데도 기여했는데, 필요한 모듈만 포함하는 맞춤형 JRE 이미지를 생성하는 jlink 도구를 사용할 수 있게 했다.
새로운 모듈 시스템 하에서 기존의 자바 아카이브 파일은 명명된 모듈, 무명 모듈, 또는 자동 모듈로 분류되어 동작한다. 표준 자바 API 라이브러리도 java.base 모듈을 필수로 하는 등 여러 모듈로 재구성되었다. 개발자는 javac 컴파일러와 java 런처에 --module-path 옵션을 사용하여 모듈 경로를 지정하고 모듈화된 애플리케이션을 컴파일하고 실행한다. 메이븐이나 그래들 같은 현대적인 빌드 도구들도 자바 모듈 시스템을 지원하여 개발 워크플로우에 통합되고 있다.
8. 여담
8. 여담
자바 개발 키트는 자바 언어의 초기 버전인 오크(Oak)에서부터 시작되었다. 1995년 썬 마이크로시스템즈에 의해 처음 발표되었으며, 1996년 1월 23일 JDK 1.0이 정식 출시되었다. 이후 자바는 엔터프라이즈 애플리케이션, 모바일 앱(안드로이드), 빅데이터 처리 프레임워크 등 다양한 분야의 핵심 기술로 자리 잡았다.
자바 개발 키트의 라이선스 정책은 역사적으로 중요한 변화를 겪었다. 오픈 소스 프로젝트인 OpenJDK가 등장한 이후, 2019년 오라클은 상용 소프트웨어인 오라클 JDK의 라이선스 정책을 변경하여 상업적 사용에 대해 유료 정책을 적용하였다. 이에 따라 아마존 코레토(Amazon Corretto), 이클립스 아도퉴미움(Eclipse Adoptium) 등 여러 벤더들이 무료로 사용 가능한 JDK 배포판을 제공하는 생태계가 활성화되었다.
자바 개발 키트는 출시 이후 지속적인 업데이트를 통해 발전해왔으며, 특히 장기 지원(Long-Term Support, LTS) 버전인 자바 8, 자바 11, 자바 17 등은 기업 환경에서 널리 채택되었다. 이러한 지속적인 발전과 풍부한 생태계 덕분에 자바 개발 키트는 수십 년이 지난 지금도 가장 영향력 있는 소프트웨어 개발 키트 중 하나로 평가받고 있다.
